home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Games of Daze
/
Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso
/
x2ftp
/
msdos
/
source
/
swagg-m
/
misc.swg
/
0022_Randmom Number Function.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-07-16
|
2KB
|
54 lines
===========================================================================
BBS: Canada Remote Systems
Date: 06-18-93 (23:27) Number: 26893
From: KENT BRIGGS Refer#: NONE
To: BRIAN PAPE Recvd: NO
Subj: RANDOM NUMBERS Conf: (1221) F-PASCAL
---------------------------------------------------------------------------
-=> Quoting Brian Pape to Erik Johnson <=-
BP> Please- I *am* looking for the source code to a decent random number
BP> generator so that I'm not dependant on Borland.
Brian, Borland did change their random:word function when they released
7.0. However the random:real function, the randomize procedure, and their
method of updating randseed remain the same as ver 6.0. Using DJ Murdoch's
CycleRandseed procedure and reverse engineering TP6's and TP7's Random
functions, I came up with the following routines:
const rseed: longint = 0;
procedure randomize67; {TP 6.0 & 7.0 seed generator}
begin
reg.ah:=$2c;
msdos(reg); {get time: ch=hour,cl=min,dh=sec,dl=sec/100}
rseed:=reg.dx;
rseed:=(rseed shl 16) or reg.cx;
end;
function rand_word6(x: word): word; {TP 6.0 RNG: word}
begin
rseed:=rseed*134775813+1;
rand_word6:=(rseed shr 16) mod x;
end;
function rand_word7(x: word): word; {TP 7.0 RNG: word}
begin
rseed:=rseed*134775813+1;
rand_word7:=((rseed shr 16)*x+((rseed and $ffff)*x shr 16)) shr 16;
end;
function rand_real67: real; {TP 6.0 & 7.0 RNG: real}
begin
rseed:=rseed*134775813+1;
if rseed<0 then rand_real67:=rseed/4294967296.0+1.0 else
rand_real67:=rseed/4294967296.0;
end;
If anyone can improve on these please post some code here, thanks.
___ Blue Wave/QWK v2.12
--- Renegade v06-11 Beta
* Origin: Snipe's Castle BBS, Waco TX (817)-757-0169 (1:388/26)